home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / MPW_C / ARC_SGML / SGMLH / ADL.H < prev    next >
Text File  |  1991-07-24  |  6KB  |  107 lines

  1. /******************************************************************************/
  2. /* Extended struct ne to support C/S/NDATA and entity name.                   */
  3. /******************************************************************************/
  4. /* ADL.H: Definitions for attribute descriptor list processing.
  5. */
  6. /* N/C/SDATA external entity types for nxetype member of ne structure. */
  7. #define ESNCDATA    1         /* External character data entity. */
  8. #define ESNNDATA    2         /* Non-SGML data entity. */
  9. #define ESNSDATA    3         /* External specific character data entity. */
  10. #define ESNSUB      4         /* SGML subdocument entity. */
  11.  
  12. /* N/C/SDATA control block for AENTITY attributes and NDATA returns.*/
  13. struct ne {                   /* N/C/SDATA entity control block. */
  14.      UNIV neid;               /* System file identifier of NDATA entity. */
  15.      PDCB nedcn;              /* Data content notation control block. */
  16.      struct ad *neal;         /* Data attribute list (NULL if none). */
  17.      UNCH *neename;           /* Ptr to entity name (length and EOS). */
  18.      UNCH nextype;            /* Entity type: NDATA SDATA CDATA SUBDOC. */
  19. };
  20. #define NESZ (sizeof(struct ne))
  21. typedef struct ne *PNE;
  22. /* NDATA entity control block fields. */
  23. #define NEID(p) (((PNE)p)->neid)            /* System ID of NDATA entity. */
  24. #define NEDCN(p) (((PNE)p)->nedcn->ename)   /* Data content notation name. */
  25. #define NEDCNID(p) (((PNE)p)->nedcn->dcnid) /* Data content notation full ID.*/
  26. #define NEDCNADL(p) (((PNE)p)->nedcn->dcnadl)/* Data content notation attlist.*/
  27. #define NEENAME(p) (((PNE)p)->neename)      /* Entity name pointer. */
  28. #define NEXTYPE(p) (((PNE)p)->nextype)      /* External entity type. */
  29. #define NEAL(p) (((PNE)p)->neal)            /* Data attributes (if any). */
  30.  
  31. /* Attribute descriptor list entry. */
  32. struct ad {
  33.      UNCH adname[NAMELEN+2];  /* Attribute name with length and EOS. */
  34.      UNCH adflags;            /* Attribute flags. */
  35.      UNCH adtype;             /* Value type. */
  36.      UNCH adnum;              /* Group size or member pos in grp. */
  37.      UNCH adlen;              /* Length of default or value (for capacity). */
  38.      UNCH *addef;             /* Default value (NULL if REQUIRED or IMPLIED). */
  39.      union {
  40.           PNE n;              /* AENTITY: NDATA control block. */
  41.           UNIV x;             /* ANOTEGRP: external DOS identifier. */
  42.      } addata;                /* Special data associated with some attributes.*/
  43. };
  44. #define ADSZ (sizeof(struct ad))   /* Size of an ad structure. */
  45.  
  46. /* Attribute flags for entire list adflags: ADLF. */
  47. #define ADLREQ    0x80        /* Attribute list: 1=REQUIRED att defined. */
  48. #define ADLNOTE   0x40        /* Attribute list: 1=NOTATION att defined. */
  49. #define ADLCONR   0x20        /* Attribute list: 1=CONREF att defined. */
  50.  
  51. /* Attribute flags for list member adflags: ADFLAGS(n). */
  52. #define AREQ      0x80        /* Attribute: 0=null; 1=required. */
  53. #define ACURRENT  0x40        /* Attribute: 0=normal; 1=current. */
  54. #define AFIXED    0x20        /* Attribute: 0=normal; 1=must equal default. */
  55. #define AGROUP    0x10        /* Attribute: 0=single; 1=group of ad's. */
  56. #define ACONREF   0x08        /* Attribute: 0=normal; 1=att is CONREF. */
  57. #define AINVALID  0x04        /* Attribute: 1=value is invalid; 0=o.k. */
  58. #define AERROR    0x02        /* Attribute: 1=error was specified; 0=o.k. */
  59. #define ASPEC     0x01        /* Attribute: 1=value was specified; 0=default. */
  60.  
  61. /* Attribute types for adtype. */
  62. #define ANMTGRP   0x00        /* Attribute: Name token group or member. */
  63. #define ANOTEGRP  0x01        /* Attribute: Notation (name group). */
  64. #define ACHARS    0x02        /* Attribute: Character string. */
  65. #define AENTITY   0x03        /* Attribute: Data entity (name). */
  66. #define AID       0x04        /* Attribute: ID value (name). */
  67. #define AIDREF    0x05        /* Attribute: ID reference value (name). */
  68. #define ANAME     0x06        /* Attribute: Name. */
  69. #define ANMTOKE   0x07        /* Attribute: Name token. */
  70. #define ANUMBER   0x08        /* Attribute: Number. */
  71. #define ANUTOKE   0x09        /* Attribute: Number token. */
  72. #define ATKNLIST  0x0A        /* Attribute: >= means value is a token list. */
  73. #define AENTITYS  0x0A        /* Attribute: Data entities (name list). */
  74. #define AIDREFS   0x0B        /* Attribute: ID reference value (name list). */
  75. #define ANAMES    0x0C        /* Attribute: Name list. */
  76. #define ANMTOKES  0x0D        /* Attribute: Name token list. */
  77. #define ANUMBERS  0x0E        /* Attribute: Number list. */
  78. #define ANUTOKES  0x0F        /* Attribute: Number token list. */
  79.  
  80. /* Field definitions for entries in an attribute list.
  81.    The list must be declared as: struct ad listname[].
  82.    The symbol AL must be defined as a list address before including
  83.    this file.
  84. */
  85. #define ADLF (AL[0].adflags)      /* Attribute list: flags. */
  86. #define ADN (AL[0].adtype)        /* Attribute list: number of list members. */
  87. #define AN (AL[0].adnum)          /* Attribute list: number of attributes. */
  88. #define ADNAME(n) ((AL[n].adname+1))/* Nth attribute in list: name. */
  89. #define ADNUM(n) (AL[n].adnum)    /* Nth att in list: number of values. */
  90. #define ADFLAGS(n) (AL[n].adflags)/* Nth attribute in list: flags. */
  91. #define ADTYPE(n) (AL[n].adtype)  /* Nth attribute in list: type. */
  92. #define ADLEN(n) (AL[n].adlen)    /* Nth attribute in list: len of def or val.*/
  93. #define ADVAL(n) (AL[n].addef)    /* Nth attribute in list: def or value. */
  94. #define ADDATA(n) (AL[n].addata)  /* Nth attribute in list: special data. */
  95. #define ADTOKEN(n,p)((AL[n].addef+(p)))/* Nth att: token at Pth pos in value. */
  96.  
  97. #define IDHASH 13             /* Est. 50 entries in ID hash table (itab). */
  98. struct id {                   /* ID attribute control block. */
  99.      struct id *idnext;       /* Next ID in chain. */
  100.      UNCH idname[NAMELEN+2];  /* ID name with length prefix and EOS. */
  101.      struct loc *idl;         /* Location where ID was found. */
  102.      struct loc *idrl;        /* Ptr to chain of locations of IDREFs. */
  103. };
  104. #define IDSZ sizeof(struct id)
  105. typedef struct id *PID;       /* Ptr to ID attribute control block. */
  106. /******************************************************************************/
  107.